package biblio;

import java.util.Observable;
import java.util.Observer;

/**
 * Classe de gestion d'ouvrage.
 * @author IUT, refactoré  par E. Ceret & modifié par A. Chalumeau
 * @version 2.0
 */
public class VueAuteur implements Observer {
	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

	private Auteur _auteur;

	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************

	/**
	 * Constructeur.
	 * @param ouvrage ouvrage � afficher.
	 */
	public VueAuteur(Auteur auteur) {
		// Liaison avec l'objet Ouvrage
		this.lierAuteur(auteur);

		// pour MVC : la vue s'ajoute comme observateur de l'objet ouvrage
		this.getAuteur().addObserver(this);
	} // Fin Constructeur

	// ************************************************************************************************************
	// M�thodes priv�es
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// Accesseurs
	
	/**
	 * @return ouvrage associ� � cette vue
	 */
	private Auteur getAuteur() {
		return _auteur;
	}
	
	
	// ------------------------------------------------------------------------------------------------------------
	// Affecteurs
	
	/**
	 * @param ouvrage ouvrage � lier cette vue
	 */
	private void lierAuteur(Auteur auteur) {
		_auteur = auteur;
	} // Fin lierOuvrage

	// ************************************************************************************************************
	// M�thodes publiques
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// Traitements

	/**
	 * Affiche toutes les informations de l'auteur associé à cette vue
	 */
	public void afficherTout() {
		EntreesSorties.afficherMessage("");
		EntreesSorties.afficherMessage("                 -------------------------------------- ");
		EntreesSorties.afficherMessage("                 -                Auteur             - ");
		EntreesSorties.afficherMessage("                 -------------------------------------- ");
		EntreesSorties.afficherMessage("                 - Nom  = " + this.getAuteur().getnomAuteur());
		EntreesSorties.afficherMessage("                 - Prenom  = " + this.getAuteur().getprenomAuteur());
		EntreesSorties.afficherMessage("                 - Nb d'ouvrage  = " + this.getAuteur().getNbOuvrages());
		EntreesSorties.afficherMessage("                 -------------------------------------- ");
		EntreesSorties.afficherMessage("                 - Ouvrages  :                 ");
				for (Ouvrage ouvrage : this.getAuteur().getOuvrages()) {
			EntreesSorties.afficherMessage("                    * " + ouvrage.getIsbn() + " " + ouvrage.getTitre());
		}		
		
		EntreesSorties.afficherMessage("                 -------------------------------------- ");
	} // Fin afficherTout

	/* 
	 * M�thode appel�e lors de la mise � jour d'un objet observ�
	 * Lorsque l'objet observ� (un ouvrage) est modifi�, la vue r�affiche l'ouvrage
	 * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
	 */
	public void update(Observable observable, Object objet) {
		// maj de la vue
		this.afficherTout();
	} // Fin upDate

	/**
	 * Elimine la vue de la liste des observateurs de l'ouvrage
	 */
	public void elimineObserveur() {
		this.getAuteur().deleteObserver(this);
	} // Fin elimineObserveur

} // Fin Classe VueOuvrage
